//MyCircularQueue(k): 构造器，设置队列长度为 k 。
//        Front: 从队首获取元素。如果队列为空，返回 -1 。
//        Rear: 获取队尾元素。如果队列为空，返回 -1 。
//        enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。
//        deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。
//        isEmpty(): 检查循环队列是否为空。
//        isFull(): 检查循环队列是否已满。
class MyCircularQueue {
        private int[] array ;
        private int front ;
        private int rear ;
    public MyCircularQueue(int k) {
          this.array = new int[k+1] ;  // 数组实现循环队列，需要浪费一个空间 ；
    }
    
    public boolean enQueue(int value) {
          if(isFull()){
              return false ;
          }
          this.array[rear] = value ;
          this.rear = (this.rear + 1) % this.array.length ;
          return true ;
    }
    
    public boolean deQueue() {
         if(isEmpty()){
             return false ;
         }
         this.front = (this.front + 1) % this.array.length ;
       return true ;
    }
    
    public int Front() {
         if(isEmpty()){
             return -1 ;
         }
         return array[this.front] ;
    }
    
    public int Rear() {
          if(isEmpty()){
             return -1 ;
         }
         return array[(this.rear + array.length -1) % array.length] ;
    }
    
    public boolean isEmpty() {
           if(this.front == this.rear){
               return true ;
           }
           return false ;
    }
    
    public boolean isFull() {
         if((this.rear+1)%array.length == this.front){
              return true ;
         }
         return false ;
    }
}
